/* 
新的关键字：

- extends：继承，用于类的定义
- super
  - 直接当作函数调用，表示父类构造函数
  - 如果当作对象使用，则表示父类的原型


注意：ES6要求，如果定义了constructor，并且该类是子类，则必须在constructor的第一行手动调用父类的构造函数

*/

class Animal {
    constructor(type, name, age, sex) {
        this.type = type;
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    print() {
        console.log(`【种类】：${this.type}`);
        console.log(`【名字】：${this.name}`);
        console.log(`【年龄】：${this.age}`);
        console.log(`【性别】：${this.sex}`);
    }

    jiao(){
        throw new Error("动物怎么叫的？");
    }
}



class Dog extends Animal{
    /* 如果定义了constructor，并且该类是子类，则必须在constructor的第一行手动调用父类的构造函数 */
    constructor(name, age, sex){
        super('犬类', name, age, sex)

        //子类特有的属性
        this.loves = "吃骨头"
    }
    
    /* 如果当作对象使用，则表示父类的原型 */
     print() {
        super.print()
        //自己独有的代码
        console.log(`【爱好】：${this.loves}`);
    }

    //同名方法，会覆盖父类
    jiao(){
        console.log("旺旺！");
    }

}


const d = new Dog("旺财", 5, "公")
d.print()
d.jiao()